// -------------------------------------------------------------------------
// Copyright (c) 2000-2009 Ufinity. All Rights Reserved.
//
// This software is the confidential and proprietary information of
// Ufinity
//
// Original author: lxt
//
// -------------------------------------------------------------------------
// UFINITY MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
// THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
// TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
// PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UFINITY SHALL NOT BE
// LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
//
// THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
// CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
// PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
// NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
// SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
// SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
// PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). UFINITY
// SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
// HIGH RISK ACTIVITIES.
// -------------------------------------------------------------------------

package com.ufinity.estimation.service.impl;

import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.cn.ufinity.common.log.LoggerFactory;
import com.ufinity.estimation.persistence.domain.ClientType;
import com.ufinity.estimation.service.ClientTypeService;

/**
 * Description of the class
 * 
 * @author lxt
 * @version 1.0
 * @since 2009-12-14
 */

public class ClientTypeServiceImpl extends BaseServiceImpl<ClientType, Long> implements ClientTypeService{
    public ClientTypeServiceImpl() {
        super(LoggerFactory.getPersistenceLog(ClientTypeServiceImpl.class),
                ClientType.class);
    }

    @Override
    public void updateClientTypes(Map<Long,ClientType> clientTypes) {
        String method = "updateClientTypes";
        List<ClientType> oldClientTypes = findAll();
        
        if (clientTypes == null) {
            getHibernateTemplate().deleteAll(oldClientTypes);
            return;
        }
        
        for(int i = 0; oldClientTypes != null && i < oldClientTypes.size(); i++) {
            ClientType oldClientType = oldClientTypes.get(i);
            Long id = oldClientType.getId();
            if (clientTypes.get(id) != null) {
                oldClientType.setName(clientTypes.get(id).getName());
                logger.info(method, "update a user type by id - " + id);
                updateEntity(oldClientType);
            } else {
                logger.info(method, "delete a user type - " + oldClientType.getName());
                deleteEntity(id);
            }
        }
        
        ClientType clientType = clientTypes.get(null);
        
        if(clientType == null) {
            return;
        }
        String[] names = StringUtils.split(clientType.getName(), ',');
        for(String name:names) {
            if(!StringUtils.isBlank(name)) {
                ClientType entity = new ClientType();
                entity.setName(name.trim());
                saveEntity(entity);
                logger.info(method, "add new user type - " + name);
            }
        }
    }
}
